/**
 * Copyright 2010 Creative Works, Inc.
 * Creative Works licenses this file to you under the Apache License, version
 * 2.0 (the "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *    http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied.  See the License for the specific language governing
 * permissions and limitations under the License.
 */
package org.sendvox.freswitch.event.impl;

import java.io.Serializable;
import java.util.Date;

import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.sendvox.freswitch.event.Event;

public interface Message extends Serializable {

	/**
	 * The event's name, which is a description of the type of event it is
	 * 
	 * @return eventName
	 */
	public Event getEventName();

	/**
	 * The UUID of the current instance of the FreeSWITCH core
	 * 
	 * @return coreUUID
	 */
	public String getCoreUUID();

	/**
	 * Sets the UUID of the current instance of the FreeSWITCH core
	 * 
	 * @param coreUUID
	 */
	public void setCoreUUID(String coreUUID);

	/**
	 * @return the freeSwitchHostname
	 */
	public String getFreeSwitchHostname();

	/**
	 * @param freeSwitchHostname
	 *            the freeSwitchHostname to set
	 */
	public void setFreeSwitchHostname(String freeSwitchHostname);

	/**
	 * @return the freeSwitchSwitchname
	 */
	public String getFreeSwitchSwitchname();

	/**
	 * @param freeSwitchSwitchname
	 *            the freeSwitchSwitchname to set
	 */
	public void setFreeSwitchSwitchname(String freeSwitchSwitchname);

	/**
	 * The date/time of the event in GMT (that is, UTC) time
	 * 
	 * @return eventDateLocal
	 */
	public String getEventDateLocal();

	/**
	 * Sets the date/time of the event in GMT (that is, UTC) time
	 * 
	 * @param string
	 */
	public void setEventDateLocal(String string);

	/**
	 * @return the eventDateGMT
	 */
	public String getEventDateGMT();

	/**
	 * @param eventDateGMT
	 *            the eventDateGMT to set
	 */
	public void setEventDateGMT(String eventDateGMT);

	/**
	 * @return the eventDateTimestamp
	 */
	public String getEventDateTimestamp();

	/**
	 * @param eventDateTimestamp
	 *            the eventDateTimestamp to set
	 */
	public void setEventDateTimestamp(String eventDateTimestamp);

	/**
	 * The C source file from which the event was fired
	 * 
	 * @return eventCallingFile
	 */
	public String getEventCallingFile();

	/**
	 * Sets the C source file from which the event was fired
	 * 
	 * @param eventCallingFile
	 */
	public void setEventCallingFile(String eventCallingFile);

	/**
	 * The name of the function that fired this event
	 * 
	 * @return eventCallingFunction
	 */
	public String getEventCallingFunction();

	/**
	 * Sets the name of the function that fired this event
	 * 
	 * @param eventCallingFunction
	 */
	public void setEventCallingFunction(String eventCallingFunction);

	/**
	 * The exact line number of the C source file where this event was fired
	 * 
	 * @return eventCallingLineNumber
	 */
	public Integer getEventCallingLineNumber();

	/**
	 * The exact line number of the C source file where this event was fired
	 * 
	 * @param eventCallingLineNumber
	 */
	public void setEventCallingLineNumber(Integer eventCallingLineNumber);

	/**
	 * The date when the event was received by SendVox
	 * 
	 * @return dateReceived
	 */
	public Date getDateReceived();

	/**
	 * Sets the date when the event was received by SendVox
	 * 
	 * @param dateReceived
	 */
	public void setDateReceived(Date dateReceived);

	/**
	 * By default this is the ipv4 address of FreeSWITCH
	 * 
	 * @return freeSWITCHIPv4
	 */
	public String getFreeSwitchIPv4();

	/**
	 * Sets the default ipv4 address of FreeSWITCH server
	 * 
	 * @param freeSWITCHIPv4
	 */
	public void setFreeSwitchIPv4(String freeSWITCHIPv4);

	/**
	 * @return the freeSwitchIPv6
	 */
	public String getFreeSwitchIPv6();

	/**
	 * @param freeSwitchIPv6
	 *            the freeSwitchIPv6 to set
	 */
	public void setFreeSwitchIPv6(String freeSwitchIPv6);

	public Object getThis();

	public void setChannelHandlerContext(ChannelHandlerContext ctx);

	public ChannelHandlerContext getChannelHandlerContext();

	public void setChannel(Channel channel);

	public Channel getChannel();

}
